// 密码加密工具
import CryptoJS from 'crypto-js'

// 加密密钥 - 在实际项目中应该从环境变量获取
const SECRET_KEY = 'pmp-system-secret-key-2024'

/**
 * 加密密码
 * @param {string} password 原始密码
 * @returns {string} 加密后的密码
 */
export function encryptPassword(password) {
  if (!password) return ''
  return CryptoJS.AES.encrypt(password, SECRET_KEY).toString()
}

/**
 * 解密密码
 * @param {string} encryptedPassword 加密后的密码
 * @returns {string} 解密后的密码
 */
export function decryptPassword(encryptedPassword) {
  if (!encryptedPassword) return ''
  try {
    const bytes = CryptoJS.AES.decrypt(encryptedPassword, SECRET_KEY)
    return bytes.toString(CryptoJS.enc.Utf8)
  } catch (error) {
    console.error('密码解密失败:', error)
    return ''
  }
}

/**
 * 验证密码
 * @param {string} inputPassword 输入的密码
 * @param {string} encryptedPassword 数据库中存储的加密密码
 * @returns {boolean} 密码是否匹配
 */
export function verifyPassword(inputPassword, encryptedPassword) {
  if (!inputPassword || !encryptedPassword) return false
  
  // 如果数据库中的密码是明文（旧数据），直接比较
  if (encryptedPassword.length < 20) {
    return inputPassword === encryptedPassword
  }
  
  // 如果是加密密码，则解密后比较
  const decryptedPassword = decryptPassword(encryptedPassword)
  return inputPassword === decryptedPassword
}

/**
 * 生成随机密码
 * @param {number} length 密码长度
 * @returns {string} 随机密码
 */
export function generateRandomPassword(length = 8) {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
  let password = ''
  for (let i = 0; i < length; i++) {
    password += chars.charAt(Math.floor(Math.random() * chars.length))
  }
  return password
} 